home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 55375 / 55375.xpi / chrome / chromeFiles / content / sc_refinements.js < prev   
Text File  |  2009-11-15  |  7KB  |  184 lines

  1. (function () {
  2.   var btPrefBranch = Components.classes["@mozilla.org/preferences-service;1"]
  3.                                .getService(Components.interfaces.nsIPrefService)
  4.                                .getBranch("extensions.brandthunder.");
  5.  
  6.   try {
  7.     var scRefinements = btPrefBranch.getBoolPref("scRefinements");
  8.     if (!scRefinements) {
  9.       return;
  10.     }
  11.   } catch (ex) {
  12.   }
  13.  
  14.   var partner = { uiLabel: 'Brand Thunder Refinements', partnerCode: 'bt', authCode: 'khb88305' };
  15.   function detectPageLoad(event) {
  16.     var boomClient = "";
  17.     try {
  18.       var currentBoom = btPrefBranch.getCharPref("currentBoom");
  19.       for (let i in BrandThunder.clients) {
  20.         for (let j in BrandThunder.clients[i].booms) {
  21.           if (j == currentBoom) {
  22.             boomClient = i;
  23.             break;
  24.           }
  25.         }
  26.       }
  27.     } catch(ex) {}
  28.     partner.subpartnerCode = boomClient;
  29.     scAddRefinementLinks(partner);
  30.   }
  31.  
  32.   function firstRun() {
  33.     var appcontent = document.getElementById("appcontent");
  34.     if (appcontent) {
  35.       appcontent.addEventListener("DOMContentLoaded", detectPageLoad, false);
  36.     }    
  37.     window.removeEventListener("load", firstRun, false);
  38.   }
  39.   function lastRun(event) {
  40.     window.removeEventListener("unload", lastRun, false);
  41.   }
  42.   window.addEventListener("load", firstRun, false);
  43.   window.addEventListener("unload", lastRun, false);
  44.  
  45. /* SURF CANYON BEGIN */
  46. function scAddRefinementLinks(partner) {
  47.     // quit if SC or any other extension has already put the refinement links on the page
  48.     if (_content.document.getElementById('scTopOfPageRefinementLinks')) {
  49.         return;
  50.     }
  51.  
  52.    try {
  53.       var host = _content.document.location.host;
  54.       var pathname = _content.document.location.pathname;
  55.       if (host) {
  56.         if (scContainsSubstring(host, '.google.') &&
  57.             scContainsSubstring(host,'www') &&
  58.             ((pathname == '/') || (pathname == '/search'))) {
  59.               window.scRefinementQuery = null;
  60.               waitForGoogleAjaxToComplete(partner);
  61.           } else if (scContainsSubstring(host, 'search.yahoo.')) {
  62.               window.scRefinementQuery = _content.document.getElementById("yschsp").value;
  63.               var div = _content.document.getElementById('web');
  64.               var insertPoint = scGetDescendents(div, "ol")[0];
  65.               launchSCAjaxRequestForRefinementLinks(partner, insertPoint, '');
  66.           } else if (scContainsSubstring(host, '.bing.com') && ((pathname == '/search'))) {
  67.               window.scRefinementQuery = _content.document.getElementById("sb_form_q").value;
  68.               var div = _content.document.getElementById('results');
  69.               var insertPoint = scGetDescendents(div, "ul")[0];
  70.               launchSCAjaxRequestForRefinementLinks(partner, insertPoint, '');
  71.           }
  72.       }
  73.    } catch (ex) {
  74.     /* Not a web page */
  75.    }
  76. }
  77.  
  78. function waitForGoogleAjaxToComplete(partner) {
  79.     if (!window.scRefinementQuery) {
  80.         var aTags = _content.document.getElementsByTagName('a');
  81.         for (var i = 0; (i < aTags.length) && !window.scRefinementQuery; i++) {
  82.            var aTag = aTags[i];
  83.            var href = aTag.href;
  84.            if (scContainsSubstring(href, '.google.') && (scContainsSubstring(href, '/advanced_search?q=') || scContainsSubstring(href,'/swr?q='))) {
  85.                window.scRefinementQuery = href.replace(/.*\?q=/, '').replace(/&.*/, '');
  86.            }
  87.         }
  88.         if (!window.scRefinementQuery) {
  89.             setTimeout(waitForGoogleAjaxToComplete, 200, partner);
  90.             return;
  91.         }
  92.     }
  93.  
  94.     var liTags = _content.document.getElementsByTagName('li');
  95.     for (i = 0; i < liTags.length; i++) {
  96.         var liTag = liTags[i];
  97.         var cls = liTag.getAttribute('class');
  98.         if (cls && ((cls == 'g') || (cls.indexOf('g ') === 0))) {
  99.             var insertPoint = liTag.parentNode;
  100.             launchSCAjaxRequestForRefinementLinks(partner, insertPoint, '');
  101.             break;
  102.         }
  103.     }
  104. }
  105.  
  106. function launchSCAjaxRequestForRefinementLinks(partner, insertPoint, yStyle) {
  107.     var div = _content.document.createElement("div");
  108.     div.innerHTML = '<div id=scTopOfPageRefinementLinks scTopPos=1 partner="' + partner.partnerCode + '" style="height: 20px; margin-top: 7px; margin-bottom: 7px;' + yStyle + '"></div>';
  109.     insertPoint.parentNode.insertBefore(div, insertPoint);
  110.  
  111.     var url = 'http://' + partner.authCode + '.surfcanyon.com/queryReformulation?partner=' + partner.partnerCode + '&subpartner=' + partner.subpartnerCode + '&authCode=' + partner.authCode + '&q=' + window.scRefinementQuery.replace(/ /g, '+');
  112.     var xhr = new window.XMLHttpRequest();
  113.     xhr.open("GET", url, true);
  114.     xhr.onreadystatechange = function() {
  115.         if (xhr.readyState == 4) {
  116.             var parser = new window.DOMParser();
  117.             var text = xhr.responseText;
  118.             var xmlRoot = parser.parseFromString(text, "text/xml");
  119.             var itemNodes = xmlRoot.getElementsByTagName('refinement');
  120.     
  121.             var items = [];
  122.             var runningLength = 0;
  123.             for (var i = 0; i < itemNodes.length; i++) {
  124.                 try {
  125.                     var itemNode = itemNodes[i];
  126.                     var refinement = itemNode.textContent.toLowerCase();
  127.                     var refinementLength = refinement.length;
  128.                     if (runningLength + refinementLength < 80) {
  129.                         runningLength += refinementLength;
  130.                         var query = scMakeRefinementQuery(refinement).replace(/ /g, '+');
  131.                         items.push('<a href="http://search.surfcanyon.com/search?f=nrl' + i + '&q=' + query + '&partner=' + partner.partnerCode + '&subpartner=' + partner.subpartnerCode + '">' + refinement + '</a>');
  132.                     }
  133.                 } catch (e) {
  134.                 }
  135.             }
  136.     
  137.             if (items.length > 0) {
  138.                 var div = _content.document.getElementById('scTopOfPageRefinementLinks');
  139.                 if (div && (div.getAttribute('partner') == partner.partnerCode)) {
  140.                     div.innerHTML = '<font size=-1><b>' + items.join('  ') + '</b>  <font size =-1 color=darkgray>' + partner.uiLabel + '</font></font>';
  141.                 }
  142.             }
  143.         }
  144.     };
  145.     xhr.send(null);
  146. }
  147.  
  148. function scMakeRefinementQuery(refinement) {
  149.     var query = refinement;
  150.  
  151.     var words = window.scRefinementQuery.replace(/"'\(\),/g, '').replace(/\+/g, ' ').split(' ');
  152.     for (var i = 0; i < words.length; i++) {
  153.         var word = words[i];
  154.         if (!scContainsSubstring(query.toLowerCase(), word.toLowerCase())) {
  155.             query = query + ' ' + word;
  156.         }
  157.     }
  158.  
  159.     return query;
  160. }
  161.  
  162. function scGetDescendents(node, tagName) {
  163.     var arr = [];
  164.     if (node && node.childNodes) {
  165.         var childNodes = node.childNodes;
  166.         for (var i = 0; i < childNodes.length; i++) {
  167.             var child = childNodes.item(i);
  168.             if (child.tagName && (!tagName || (child.tagName.toUpperCase() == tagName.toUpperCase()))) {
  169.                 arr[arr.length] = child;
  170.             }
  171.             if (child.hasChildNodes()) {
  172.                 arr = arr.concat(scGetDescendents(child, tagName));
  173.             }
  174.         }
  175.     }
  176.     return arr;
  177. }
  178.  
  179. function scContainsSubstring(text, substring) {
  180.     return text && substring && (text.indexOf(substring) >= 0);
  181. }
  182. /* SURF CANYON END */
  183. })();
  184.